// lib/api/comment_api.dart
import 'dart:async';

import 'package:dio/dio.dart';
import '../models/response.dart'; // 假设你的 ResponseSuccess 模型在这里
import '../models/comment.dart'; // 导入 Comment 模型
import 'dio_client.dart'; // 导入你的 Dio 客户端实例

class CommentApi {
  final Dio _dio = DioClient().dio;

  /// 获取帖子评论列表
  /// [postId] 帖子ID
  /// [page] 页码
  /// [size] 每页数量
  Future<ResponseSuccess<List<Comment>>> getComments({
    required String postId, // 帖子ID，类型为 String
    int page = 1,
    int size = 10,
  }) async {
    try {
      final response = await _dio.get(
        '/comment/list',
        queryParameters: {
          'post_id': postId, // 直接传递 String 类型的 postId
          'page': page,
          'size': size,
        },
      );

      // --- 关键修改在这里 ---
      // 使用 ResponseSuccess 泛型解析响应
      return ResponseSuccess.fromJson(
        response.data, // 这里的 response.data 是服务器返回的整个 JSON Map
            (json) {
          // 这个 'json' 参数对应的是服务器响应中 'data' 字段的值。
          // 如果服务器返回 {"code":1000,"msg":"success","data":null}，
          // 那么这里的 'json' 就会是 null。
          if (json == null) {
            return []; // 如果 'data' 字段是 null，我们返回一个空列表，表示没有评论。
          }
          // 否则，将其强制转换为 List，并映射为 Comment 对象列表。
          return (json as List).map((e) => Comment.fromJson(e as Map<String, dynamic>)).toList();
        },
      );
      // --- 关键修改结束 ---
    } on DioException catch (e) {
      final errorMessage = e.response?.data?['msg'] ?? '获取评论列表失败';
      throw 'Error $errorMessage (Status: ${e.response?.statusCode})';
    } catch (e) {
      throw '获取评论列表发生未知错误: $e';
    }
  }

  /// 创建评论
  /// [postId] 评论所属的帖子ID
  /// [content] 评论内容
  // 返回类型改为 Future<void>，表示成功时不返回具体数据
  Future<void> createComment({
    required String postId, // 帖子ID，保持 String 类型
    required String content, // 评论内容
  }) async {
    try {
      final response = await _dio.post(
        '/comment', // 根据你的 curl 命令，创建评论的 API 路径是 /comment
        data: {
          // 将 String 类型的 postId 转换为 BigInt，以匹配后端可能期望的数字类型
          'post_id': postId,
          'content': content, // 评论内容
        },
      );

      // 直接检查响应数据，不再通过 ResponseSuccess.fromJson 进行解析
      if (response.data != null && response.data['code'] == 1000) {
        // 如果 code 是 1000，表示成功，无需返回具体数据
        print('评论创建成功，服务器响应: ${response.data}'); // 用于调试
      } else {
        // 如果 code 不是 1000，或者响应数据结构不符合预期，则抛出业务错误
        final apiErrorMessage = response.data?['msg'] ?? '未知创建评论错误';
        throw 'API错误: $apiErrorMessage (Code: ${response.data?['code']})';
      }
    } on DioException catch (e) {
      String errorMessage;
      if (e.response != null) {
        // 服务器有响应，但状态码是错误（例如 4xx, 5xx），或者响应数据解析失败
        errorMessage = e.response?.data?['msg'] ?? '服务器返回错误';
        print('createComment DioError: $errorMessage (Status: ${e.response?.statusCode})');
        print('createComment DioError Response Data: ${e.response?.data}');
        throw '网络请求失败: $errorMessage (状态码: ${e.response?.statusCode})';
      } else {
        // 没有收到服务器响应，可能是网络连接问题或服务器未运行
        errorMessage = '网络连接失败或服务器无响应';
        print('createComment DioError: $errorMessage');
        throw '网络连接失败: $errorMessage';
      }
    } catch (e) {
      // 捕获其他未知错误，例如 BigInt.parse 失败
      print('createComment 未知错误: $e');
      throw '创建评论发生未知错误: $e';
    }
  }
}